﻿
var white_from = {
    vdiv: 'FromTab',
      is: false,
    show: function() { var a=white_from; if( !a.is ) { a.create(); a.is = true; } else $('#gbox_'+a.vdiv).show(); },
    hide: function() { $('#gbox_'+white_from.vdiv).hide(); },
  create: function()
{
var vdiv = this.vdiv;
var pager = $('#'+vdiv+'Pager');
var edit_in_process = 0;
var benable = { add:true, edit:false, del:false, search:true };
 
var fromtab = $('#'+vdiv).jqGrid({
	url:'from.php',
	editurl: 'from-write.php',
	datatype: 'json',
	autowidth: false,
	scrollOffset: 22,
	gridview: true,
	hoverrows: true,
	recordpos: 'right',
	scrollrows: true,
	viewrecords: true,
	multiselect: true,
	multiselectWidth: 40,
	multiboxonly: true,
//	multikey: 'ctrlKey',
//	footerrow: true,
	mtype: 'GET',
	colNames:['ID','Адрес отправителя', 'IP сервера','Комментарий'],
// , classes:'ui-state-default'
	colModel :[
		{name:'id', index:'rec_id', width:60, editable: false},
		{name:'address', index:'address', width:300, editable: true, 
		 editoptions:{maxlength:"255"},
		 editrules:{custom:true, custom_func:function( address, colname ){
			if( ipdepo.is_mail_pattern( address ) ) return [true,""];
			else return [false, "<p>Неправильно задан шаблон e-mail адреса</p>"];
		 } },
		 formoptions:{rowpos:1,colpos:1}},
		{name:'subnet', index:'subnet', width:120, editable: true, editoptions:{maxlength:"18"}, formoptions:{rowpos:2,colpos:1}},
		{name:'comment', index:'comment', width:300, editable: true, editoptions:{maxlength:"255"}, formoptions:{rowpos:3,colpos:1}}
    ],
	pager: pager,
	toolbar: [true,'both'],
	height: 300,
	rowNum:20,
	rowList:[10,20,50,100],
	sortname: 'rec_id',
	sortorder: 'asc',
	sortable: true,
	caption: 'Список "белых" E-Mail адресов',
//	rownumbers: true,
//	rownumWidth: 40,
	onPaging: function( pgButton ) { reset_custom_state(); },  
	onSelectAll: function(ids, status) {
		if( status ) {
			if( edit_in_process ) {
				fromtab.restoreRow(edit_in_process);
				edit_in_process = 0; 
			}
			set_toolbar_button_state( false, false, true, null );			
		}
		else {
			set_toolbar_button_state( true, false, false, null );
		}
	},
	onSelectRow: function(id, status){
		var bnum = this.p.selarrrow.length;
		switch ( bnum ) {
			case 0:
				set_toolbar_button_state( true, false, false, null );
				break;
			case 1:
				set_toolbar_button_state( true, true, true, null );
				break;
			default:
				set_toolbar_button_state( false, false, true, null );
				break;
		}
		
//		if( edit_in_process && edit_in_process != id ) {
		if( edit_in_process ) {
			fromtab.restoreRow(edit_in_process);
			edit_in_process = 0;
		}
	},

	ondblClickRow: function(id, irow){
		if( edit_in_process != id ) {
			set_toolbar_button_state( false, false, false, null );
			fromtab.editRow(id, true, 
					function(){ edit_in_process = id; return true; } ,
					function( adata ) {
                        var res = responseOnSubmit(adata, null);
                        if( res[0] )
                            return true;
                        else
                            AlertDlg('Внимание', res[1]); 
                        return false;
					},
					'from-write.php',
					null,
					edit_process_done,
					edit_process_done,
					edit_process_done
				);
		}
	}
})
.jqGrid('navGrid', '#'+vdiv+'Pager', {
	add: false, del: false, edit: false, search: false,
	refreshtext:'Обновить',
	afterRefresh: function() {
			fromtab.resetSelection();
			reset_custom_state();
		}
	}
);

fromtab.jqGrid('navButtonAdd','#'+vdiv+'Pager',{
    caption: 'Столбцы',
    title: 'Выбор отображаемых столбцов',
    buttonicon: 'ui-icon-transfer-e-w',
    onClickButton: function(){
            fromtab.setColumns({
                width: 250,
                modal: true,
                jqModal: true,
                closeOnEscape: true,
                colnameview: false,
                updateAfterCheck: true
            });
    }
});
     
fromtab.jqGrid('navButtonAdd','#'+vdiv+'Pager',{
    caption: 'Show',
    title: 'Показ интересного',
    buttonicon: 'ui-icon-notice',
    onClickButton: function(){
                var msg =   "sortname: "+fromtab[0].p.sortname+"<br>"+
                            "sortorder: "+fromtab[0].p.sortorder+"<br><br>"+
                            "Col1.name: "+fromtab[0].p.colModel[1].name+"<br>"+
                            "Col1.hidden: "+fromtab[0].p.colModel[1].hidden+"<br><br>"+
                            "Col2.name: "+fromtab[0].p.colModel[2].name+"<br>"+
                            "Col2.hidden: "+fromtab[0].p.colModel[2].hidden+"<br><br>";
                          
                AlertDlg('Параметры столбцов', msg);
// remapColumns
    }
});
     
// refreshstate: 'firstpage',
// Создадим InlineSearch
fromtab.filterToolbar({
	afterSearch:function() { reset_custom_state(); }
});

fromtab[0].toggleToolbar();

// $('div#gview_FromTab thead tr.ui-search-toolbar').toggle();

// End of jqGrid construct

$.jqm.params.overlay = 1;

// ToolBar
var tfromtab = $("#t_"+vdiv);

tfromtab.height(40);

// Добавим кнопку для "Добавить"
tfromtab.append('<div id="start_add_row" style="background-image:url(img/plus.png); width:60px">Добавить</div>');

$("#start_add_row")
	.hover(
		function(){ if(benable.add) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( function(){
		if( !edit_in_process ) {
			$('#'+vdiv).jqGrid('editGridRow', "new", {
						modal:true, 
						jqModal:true, 
						url:'from-add.php', 
						closeOnEscape:true,
                        savekey:[true,13],
                        afterSubmit: responseOnSubmit
			});
		}
	} );

// Добавим кнопку для правки
tfromtab.append('<div id="start_edit_row" style="background-image:url(img/edit.png); width:60px">Изменить</div>');

$("#start_edit_row")
	.fadeTo( 'fast', 0.5 )
	.hover(
		function(){ if(benable.edit) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( do_row_edit );
	
function do_row_edit() {
		if(fromtab[0].p.selarrrow.length == 1 && !edit_in_process) {
			fromtab.jqGrid('editGridRow', fromtab[0].p.selrow, {
						modal:true, 
						jqModal:true, 
						url:'from-write.php',
						closeOnEscape:true,
                        savekey:[true,13],
                        afterSubmit: responseOnSubmit,
                        onclickPgButtons: function(whichbut,formid,rowid){ fromtab.resetSelection(); }
 			});
		}	
}


// Добавим кнопку для удаления
tfromtab.append('<div id="start_delete_row" style="background-image:url(img/busy.png); width:60px;">Удалить</div>');

$("#start_delete_row")
	.fadeTo( 'fast', 0.5 )
	.hover(
		function(){ if(benable.del) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( do_row_del );

function do_row_del() {
		if( benable.del && !edit_in_process) {
			var rowlist = fromtab[0].p.selarrrow.toString();
			fromtab.jqGrid('delGridRow', rowlist, {
						modal:true, 
						jqModal:true, 
						url:'from-delete.php',
						closeOnEscape:true,
                        afterSubmit: responseOnSubmit,
						afterComplete:function( response, postdata ) {
								set_toolbar_button_state( true, false, false, true );
								} 
						} 
			);
		}
}

// Утилиты кнопок редактирования.
function responseOnSubmit(response, postdata) {
    var rsp = response.responseText;
    var success = true;
    var msg = '';
    var rsparr;
    
    if(rsp != "Ok") {
        success = false;
        msg = 'Error';
        rsparr = rsp.match(/^(Error)\s(\d\d\d)\s(.*)$/);
        if( rsparr && rsparr[1] == 'Error' )
            msg = rsparr[3];
    }
    return [success,msg];
}

// thead tr.ui-search-toolbar
// Добавим кнопку для фильтра
tfromtab.append('<div id="start_filter_row" style="background-image:url(img/search.png); width:60px">Фильтр</div>');

$("#start_filter_row")
	.hover(
		function(){ if(benable.search) $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( function() { fromtab[0].toggleToolbar(); } );


// Добавим кнопку для экспорта
tfromtab.append('<div id="start_export" style="background-image:url(img/database-export.png); width:60px;">Экспорт</div>');

$("#start_export")
	.fadeTo( 'fast', 1 )
	.hover(
		function(){ $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( do_export );

function do_export() {
    window.location = "from-export.php";
}


// Добавим кнопку для импорта
tfromtab.append('<div id="start_import" style="background-image:url(img/database-import.png); width:60px;">Импорт</div>');

$("#start_import")
	.fadeTo( 'fast', 1 )
	.hover(
		function(){ $(this).css( {'border-color':'#A6C9E2', 'cursor':'pointer'} ); },
		function(){ $(this).css( {'border-color':'transparent', 'cursor':'default'} );}
	)
	.click( open_import_dialog );

// Создание обьекта диалога для импорта.
$('#DlgImport').dialog( { title: "Импорт списка 'белых' адресов", autoOpen: false, modal: true });

// Реакция на кнопки диалога импорта
function do_white_from_import() {
 var options = { url: 'from-import.php', success: from_import_result };
                        
    $('#from_import_mess td:eq(0) img').attr({ src: "img/loading9.gif" });
    $('#from_import_mess td:eq(1)').html( "Выполняется импорт. Ожидайте ..." );
    
    $('#from_import_form').hide();    
    $('#from_import_mess').show();
    $('#from_import_form').ajaxSubmit(options);
}
function close_import_dialog() { 
    $('#from_import_mess td:eq(0)').show(); // Включим поле иконки
    $(this).dialog("close"); 
}

// Отображение результатов импорта
function from_import_result(response, status, xhr, elem) {
var restext, msg;

    $('#DlgImport').dialog( "option", "buttons", { "Закрыть": close_import_dialog } );
    restext = response.match(/<body>(.*)<\/body>/);
    msg = restext[1].match(/^Ok\s(.*)$/);
    if( !msg ) {
        msg = restext[1];
        $('#from_import_mess td:eq(0)').hide();
    }
    else msg = msg[1];

    $('#from_import_mess td:eq(0) img').attr({ src: "img/information.png" });
    $('#from_import_mess td:eq(1)').html( msg );
}

// Вызов диалога импорта
function open_import_dialog() {
var impdlg = $('#DlgImport');

    impdlg.dialog( "option", "height", 180 );
    impdlg.dialog( "option", "width", 400 );
    impdlg.dialog( "option", "buttons", { "Импорт": do_white_from_import, "Отмена": close_import_dialog });

    $('#from_import_mess').hide(); 
    $('#from_import_form').show();
    $('#DlgImport').dialog('open');
}


// Установим стили для кнопок
$('#t_'+vdiv+' > div').css( {
	'float': 'left', 
//	'height':'20px',
	'margin': '2px',
	'border': '1px solid transparent',
	'padding-top':'16px',
	'background-position':'50% 5%',
	'background-repeat':'no-repeat',
	'font-weight': '100',
	'text-align':'center',
});

function edit_process_done() { 
	edit_in_process = 0; 
	set_toolbar_button_state( true, true, true, true );
	return true;
}

function set_toolbar_button_state( add, edit, del, search ) {
	if( add !== null ) {
		$('#start_add_row').fadeTo('fast', add ? 1 : 0.5);
		benable.add = add;
	}
	if( edit !== null ) {
		$('#start_edit_row').fadeTo('fast', edit ? 1 : 0.5);
		benable.edit = edit;
	}
	if( del !== null ) {
		$('#start_delete_row').fadeTo('fast', del ? 1 : 0.5);
		benable.del = del;
	}
	if( search !== null ) {
		$('#start_search_row').fadeTo('fast', search ? 1 : 0.5);
		benable.search = search;
	}
	
}
function reset_custom_state() {
	if( edit_in_process ) {
		fromtab.restoreRow(edit_in_process);
		edit_in_process = 0; 
	}
	set_toolbar_button_state( true, false, false, true );
}

// Alert Dialog;
$('#DlgAlert').dialog( {
    autoOpen: false,
    modal: true,
    buttons: {
        "Закрыть": function() { $(this).dialog("close"); }
    }
});

function AlertDlg( title, msg ) {
    $('#DlgAlert')
        .html(msg)
        .dialog( 'option', 'title', title )
        .dialog('open');
}

}  // End of create function definition

}; // End of white_from class definition